<?php
namespace Kuoqi\Interpreter;
class Echos{
	static protected $assign,$code;
	static public function execCode($code,$assign){
		self::$assign = $assign;
		self::$code = $code;
		self::__initializate();
		$code = self::$code;
		self::$code = '';
		return 	$code;
	}
	static public function __initializate(){
		$data = self::$code;
		/**
			//。 ？ ！ ， 、 ； ： “ ” ‘ ' （ ） 《 》 〈 〉 【 】 『 』 「 」 ﹃ ﹄ 〔 〕 … — ～ ﹏ ￥
			//code = code.replace(/\/\/[0-9a-zA-Z\s\u4e00-\u9fa5\u3002|\uff1f|\uff01|\uff0c|\u3001|\uff1b|\uff1a|\u201c|\u201d|\u2018|\u2019|\uff08|\uff09|\u300a|\u300b|\u3008|\u3009|\u3010|\u3011|\u300e|\u300f|\u300c|\u300d|\ufe43|\ufe44|\u3014|\u3015|\u2026|\u2014|\uff5e|\ufe4f|\uffe5]+\n/g,'')
		*/
		$status = preg_match_all('/{\$([0-9a-zA-Z\.\_\|\[\]\'\"\-]+?})/',$data,$lis);
		if(!$status){return NULL;}
		$list = array();
		foreach($lis[0] as $k=>$v){
			$list[$k]['need'] = $lis[0][$k];
			$list[$k]['repl'] = substr($lis[1][$k],0,strlen($lis[1][$k])-1);
		}
		foreach($list as $v){
			$data = str_replace($v['need'],self::replace($v['repl']),$data);
		}
		self::$code = $data;
	}
	static private function replace($val){
		return '<?php '.self::dealname($val).'?>';
	}
	static private function dealname($str){
		$arr = explode('|',$str);
		if(isset($arr[2])){
			switch(strtolower($arr[2])){
				case 'conts':
					$str = 'if(isset($'.$arr[0].')){echo \Kuoqi\Inputs::conts_decode($'.$arr[0].');}else{echo strval("'.$arr[1].'");}';
					break;
				case 'descs':
					$str = 'if(isset($'.$arr[0].')){echo substr(strip_tags(htmlspecialchars_decode($'.$arr[0].')),0,500);}else{echo strval("'.$arr[1].'");}';
					break;
				case 'string':
					$str = 'if(isset($'.$arr[0].')){echo strval($'.$arr[0].');}else{echo strval("'.$arr[1].'");}';
					break;
				case 'nl2br':
					$str = 'if(isset($'.$arr[0].')){echo nl2br($'.$arr[0].');}else{echo nl2br("'.$arr[1].'");}';
					break;
				case 'date':
					$str = 'if(isset($'.$arr[0].')){echo date("Y-m-d",intval($'.$arr[0].'));}else{echo strval("'.$arr[1].'");}';
					break;
				case 'datetime':
					$str = 'if(isset($'.$arr[0].')){echo date("Y-m-d H:i:s",intval($'.$arr[0].'));}else{echo strval("'.$arr[1].'");}';
					break;
				case 'sdatetime':
					$str = 'if(isset($'.$arr[0].')){echo date("ymd His",intval($'.$arr[0].'));}else{echo strval("'.$arr[1].'");}';
					break;
				case 'html':
					$str = 'if(isset($'.$arr[0].')){echo \Kuoqi\Inputs::safe_decode(htmlspecialchars_decode($'.$arr[0].'));}else{echo strval("'.$arr[1].'");}';
					break;
				case 'original'://原始的输出模式
					$str = 'echo $'.$arr[0].';';
					break;
				case 'echo'://原始的输出模式
					$str = 'echo $'.$arr[0].';';
					break;
				default:
					if(function_exists($arr[2]))
					{
						$str = 'echo '.$arr[2].'($'.$arr[0].');';
					};
			}	
		}elseif(isset($arr[1])){
			$str = 'if(isset($'.$arr[0].')){echo $'.$arr[0].';}else{echo "'.$arr[1].'";}';
		}else{
			$str = 'if(isset($'.$str.')){ echo $'.$str.';}else{echo "";}';
		}
		return $str;
	}
}